package main

import (
	"bufio"
	"context"
	"fmt"
	"log"
	"os"
	"os/exec"
	"strings"
	"time"
)

func main2() {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute)
	defer cancel()

	cmd := exec.CommandContext(ctx, "git", "clone", /* "--progress",*/
		"http://1.14.125.6:3000/liuyuchao/runner-test.git")

	// 设置环境变量以获取更详细的输出
	cmd.Env = append(os.Environ(),
		"GIT_TERMINAL_PROMPT=1",
		"GIT_TRACE=1",
		"TERM=dumb", // 告诉 Git 这是一个简单终端
	)

	// 获取标准输出和错误输出管道
	stdout, err := cmd.StdoutPipe()
	if err != nil {
		log.Fatalf("获取标准输出管道失败: %v", err)
	}

	stderr, err := cmd.StderrPipe()
	if err != nil {
		log.Fatalf("获取标准错误管道失败: %v", err)
	}

	// 启动命令
	if err := cmd.Start(); err != nil {
		log.Fatalf("启动命令失败: %v", err)
	}

	// 处理标准输出
	go func() {
		scanner := bufio.NewScanner(stdout)
		for scanner.Scan() {
			line := scanner.Text()
			// 过滤掉不重要的 GIT_TRACE 信息
			if !strings.Contains(line, "trace:") {
				fmt.Printf("[stdout] %s\n", line)
			}
		}
		if err := scanner.Err(); err != nil {
			log.Printf("读取标准输出失败: %v", err)
		}
	}()

	// 处理标准错误
	go func() {
		scanner := bufio.NewScanner(stderr)
		for scanner.Scan() {
			line := scanner.Text()
			fmt.Printf("[stderr] %s\n", line)
		}
		if err := scanner.Err(); err != nil {
			log.Printf("读取标准错误失败: %v", err)
		}
	}()

	// 等待命令完成
	if err := cmd.Wait(); err != nil {
		if ctx.Err() == context.DeadlineExceeded {
			log.Fatalf("命令执行超时: %v", err)
		}
		log.Fatalf("命令执行失败: %v", err)
	}

	fmt.Println("命令执行成功")
}
